package com.hope.class_;

import com.hope.Cat;

/**
 * 类加载-初始化阶段
 */
public class ClassLoad {
    public static void main(String[] args) {

        //分析
        //1. 加载B类，并生成B的class对象
        //2. 链接 此时 静态变量赋初始值 所以 num=0
        //3. 初始化阶段
        //  依次自动收集类中的所有静态变量的赋值动作和静态代码块中的语句，并合并
        /*  生成clinit()方法
            clinit(){
                System.out.println("B 静态代码块被执行");
                num=300;    //按顺序执行，此时num=300;就没有意义了
                num=100;
            }
            合并：按顺序那num=300就没有意义了，所以最后num=100



         */
         // new B();//类加载 B() 构造器被执行
        System.out.println(B.num);//100  如果直接使用类到到静态属性，也会导致类到加载
    }
}
class B {
    static {
        System.out.println("B 静态代码块被执行");
        num=300;
    }
    static int num = 100;

    public B() {
//        如果没有构建对象 new B(); 就不会执行构造器
//        如果new 了一个对象，那么构造器里的代码也会合并到clinit()方法中
        System.out.println("B()构造器被执行");
    }
}


